home *** CD-ROM | disk | FTP | other *** search
- εProgramación\OOP\C++\num_4π
-
- εLos primeros ejerciciosπ
-
- En este número no veremos cosas nuevas, nos limitaremos a asentar lo
- aprendido en anteriores entregas. Por ello teneis en el direcctorio "δOOPπ"
- todos los fuentes que comentaré más adelante.
- Trataremos de hacer un pequeño programa en C++ que sirva para hacer juegos
- de δROLπ conversacionales (al estilo MUD, sin gráficos ni complicaciones). Lo
- que haremos, será un juego en principio que, número tras número, le hiremos
- añadiendo cosas para acabar teniendo un kernel para diseñar juegos
- conversacionales.
- Comenzaremos este proyecto como cualquier otro, es decir, escribiendo en
- lápiz y papel lo que queremos hacer, como lo vamos ha hacer, etc. Esto no lo
- haré yo aquí, pero es recomendable que lo hagais vosotros para ver lo que
- hace falta (ya os lo mostraré cuando llegué el número de las notaciones
- orientadas a objetos, técnica Bosch, etc).
-
- ε El juegoπ
-
- El objetivo serà crear un programa (juego) interactivo con el usuario que
- acepte unos cuantos comandos (por ahora no muchos) y cuya base parezca lo que
- acostrumbramos a llamar juego conversacional. Estan claros algunos de los
- elementos que contendrá: mostruos, objetos, armas, habitaciones, etc.
- En esta primera toma de contacto, nos conformaremos con poder definir unos
- cuantos objetos y habitaciones, más adelante iremos ampliando el juego y
- con ello descubriremos la potencia de C++ a la hora de reutilizar el código.
- Por ejemplo, definiremos un objeto, pero un arma no es más que otro objeto,
- así que la heredaremos y nos ahorraremos escribir mucho código.
- En el directorio 'δOOPπ' encontrareis 3 ficheros ∞.CPPπ y otros 2 ∞.HPPπ, que son
- todos los que tiene el juego por ahora. Los ficheros δ.HPPπ son definiciones de
- clase, en concreto, de las clases "δobjetoπ" y "δroomπ". Los δ.CPPπ son las
- implementaciones de dichas clases.
-
- ε La clase 'objeto'π
-
- En la própia definición de la clase podemos ver algunos rasgos
- característicos de δC++π. Por ejemplo, cuando incluimos en nuestros programas
- δC++π ficheros que provenian de C (como en este caso "δstdio.hπ") tenemos que
- hacerlo preponiendo la palabra clave "Γexternπ". Otra característica, común a
- todos los lenguajes POO, es que las variables de cada clase estan en la parte
- privada, mientras las funciones lo estan en la pública o privada
- indiferentemente. No es que no se pueda, sino que no se debe por varias cosas
- que ya hemos comentado en anteriores números.
- Tenemos una cosita interesante en la definición de las funciones: la función
- "Γes_nombre()π", aunque no lo parezca, es una función 'Ωinlineπ'. Digo que no lo
- parece, más que nada, porque no lleva la palabra reservada 'Ωinlineπ' delante,
- pero la verdad es que todas las funciones que se implementan en la própia
- definición de la clase, son por defecto funciones "Ωen líneaπ".
- Ya en la implementación de la clase 'Γobjetoπ', podemos ver la inclusión del
- fichero de definición, cosa que debemos hacer siempre ya que si no el
- compilador no sabe donde estan definidas las funciones que estamos
- implementando. Todas las funciones son muy sencillas en sí, pero cabe destacar
- la función "Γes_un()π" que indica si la cadena de caràcteres que se le pasa es
- igual al nombre del objeto.
-
- ε La clase 'room'π
-
- Esta clase define las habitaciones; contiene una descripción, punteros a
- las habitaciones a las que puede acceder (norte, este, sur y oeste) y un
- array con los objetos que hay en la própia habitación. Tambien se definen unas
- costantes que se usaran en las llamadas a funciones para indicar movimientos
- entre habitaciones.
- En la implementación podemos ver las funciones implementadas. La función
- "Γdescribe()π", a parte de escribir la descripción de la habitación, escribe
- todos los objetos que se ven. Las funciones "Γcoge_obj()π" y "Γdeja_obj()π" lo
- que hacen es eso, coger y dejar objetos en la habitación, devolviendo en el
- primer caso un puntero a un 'objeto' si existe ese objeto en la sala, y en el
- segundo caso introduciendo el objeto en el array de la habitación.
-
- ε El módulo principalπ
-
- Como todavia no hemos hecho más que comenzar, las habitaciones y objetos
- estan definidos en el própio programa principal. Como podeis observar, en
- C++ se pueden definir variables en cualquier lugar del código (en este caso
- ha sido muy utilizado en el 'Γmainπ').
- Luego hay un bucle 'Γforπ' infinito que terminará cuando se introduzca el
- comando "δquitπ" mediante un 'Γexitπ'. Se usa ahora (en el próximo número ya
- cambiará) variables globales para llevar todos los datos como en que sala
- se está, que se lleva encima, etc.
- Viendo el código podriais preguntaros ¿porqué unas veces se accede a las
- funciones de las clases con un punto y otras con una flechita? No se si me
- explico, por ejemplo:
-
- Γ habitacion1.describe();π
- Γ habitacion2->describe();π
-
- La primera llamada se realiza cuando 'Γhabitacion1π' es un objeto, es decir,
- una instancia de una clase própiamente dicho; mientras la segunda llamada se
- hace cuando 'Γhabitacion2π' es un puntero a un objeto. Más claro, esas llamadas
- se harian cuando las habitaciones hubieran sido definidas de la siguiente
- forma:
-
- Γ Room habitacion1;π
- Γ Room *habitacion2;π
-
-
- Pues ya está todo este número, sólo queda compilar el ejemplo. Yo lo hice
- en δTurbo C/C++ v2.0π y para ello creé un proyecto que tambien se incluye.
- En el próximo número veremos más características del C++ que nos ayudaran en
- la programación de este tipo de juegos. Algunas de estas características
- seran la reutilización de código (mediante herencia), mejora en el manejo de
- cadenas (con sobrecarga de operadores), etc. A parte, tambien se limaran
- algunas asperezas como la pérdida de memória (que a veces se convierte en
- falta de ella) al tener guardados los objetos en arrays limitados en tamaño
- (usaremos listas).
-
- ∞Navi Dj.π
-